package com.regan.erp.controller;

import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.ObjectUtil;
import com.jfinal.aop.Before;
import com.jfinal.aop.Duang;
import com.jfinal.kit.Kv;
import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
import com.jfinal.plugin.activerecord.tx.Tx;
import com.regan.erp.aop.NotNullPara;
import com.regan.erp.controller.base.BaseController;
import com.regan.erp.model.*;
import com.regan.erp.service.MenuService;
import com.regan.erp.util.Constants;
import com.regan.erp.util.FunctionUtils;

import java.util.List;

/**
 * 菜单管理
 *
 * @author zhangby
 * @action /menu
 * @date 2018/10/11 下午3:52
 */
public class MeunController extends BaseController {

    //菜单管理service
    MenuService menuService = Duang.duang(MenuService.class);

    /**
     * 获取菜单列表
     *
     * @title 菜单列表查询
     * @resqParam id|'id'| int|必填
     * @resqParam name|'菜单名称'|String|非必填
     * @resqParam label|'菜单标识'|String|非必填
     * @resqParam icon|'图标'|String|非必填
     * @resqParam href|'菜单链接'|String|非必填
     * @resqParam type|'类型：1 目录 ，2 菜单 ， 3 按钮'| char|非必填
     * @resqParam sort|'排序'| int|非必填
     * @resqParam is_show|'是否显示：0 隐藏，1 显示'| char|非必填
     * @resqParam permission|'权限标识'|String|非必填
     * @respBody {"code":"000","data":"","msg":"success"}
     * @requestType post
     * @author zhangby
     * @date 2018/10/11 下午3:54
     */
    public void getMenuListData() {
        renderJson(ResultPoJo.create().result((menuService.getMenuListData(getParamDict()))));
    }

    /**
     * 菜单保存
     *
     * @param parent_id|'父级编号'|            int|必填
     * @param name|'菜单名称'|String|非必填
     * @param label|'菜单标识'|String|非必填
     * @param icon|'图标'|String|非必填
     * @param href|'菜单链接'|String|非必填
     * @param type|'类型：1                   目录 ，2 菜单 ， 3 按钮'| char|非必填
     * @param sort|'排序'|                   int|非必填
     * @param is_show|'是否显示：0              隐藏，1 显示'| char|非必填
     * @param permission|'权限标识'|String|非必填
     * @title 添加菜单
     * @resqParam code|状态码|String|必填
     * @resqParam data|数据|object|非必填
     * @resqParam msg|消息信息|String|必填
     * @respBody {"code":"000","data":"","msg":"success"}
     * @requestType post
     * @author zhangby
     * @date 2018/10/11 下午4:56
     */
    @NotNullPara({"parent_id", "name"})
    @Before(Tx.class)
    public void saveMenu() {
        Menu menu = getModel(Menu.class, "", true);
        //设置父级编号
        if (!ObjectUtil.equal(Menu.MAIN_MEUN_ID_0, menu.getParentId())) {
            Menu parentMenu = Menu.dao.findById(menu.getParentId());
            menu.setParentIds(parentMenu.getParentId() + "," + parentMenu.getId());
        } else {
            menu.setParentIds(menu.getParentId().toString());
        }
        save(menu);
        //判断是否为新增，如果为新增默认给管理员增加菜单权限
        if (StrKit.isBlank(getPara("id"))) {
            new RoleMenu().setRoleId(Role.SYS_ROLE_ID).setMenuId(menu.getId()).save();
        }
        renderJson(ResultPoJo.create());
    }

    /**
     * 获取菜单详情
     *
     * @param id|'id'| int|必填
     * @title 获取菜单信息
     * @resqParam id|'id'| int|必填
     * @resqParam parent_id|'父级编号'| int|必填
     * @resqParam parent_ids|'所有父级编号'| int|必填
     * @resqParam name|'菜单名称'|String|非必填
     * @resqParam label|'菜单标识'|String|非必填
     * @resqParam icon|'图标'|String|非必填
     * @resqParam href|'菜单链接'|String|非必填
     * @resqParam type|'类型：1 目录 ，2 菜单 ， 3 按钮'| char|非必填
     * @resqParam sort|'排序'| int|非必填
     * @resqParam is_show|'是否显示：0 隐藏，1 显示'| char|非必填
     * @resqParam permission|'权限标识'|String|非必填
     * @resqParam create_date|创建时间|date|非必填
     * @resqParam update_date|更新时间|date|非必填
     * @resqParam create_user_id|'创建者'|String|非必填
     * @resqParam update_user_id|'更新者'|String|非必填
     * @resqParam remarks|'备注'|String|非必填
     * @resqParam del_flag|'删除标记  0：正常，1：删除'| char|非必填
     * @respBody {"code":"000","data":"","msg":"success"}
     * @requestType post
     * @author zhangby
     * @date 2018/10/15 下午12:20
     */
    @NotNullPara("id")
    public void getMenu() {
        Menu menu = Menu.dao.findById(getPara("id"));
        renderParseJson(ResultPoJo.create().result(menu));
    }

    /**
     * 获取菜单最大排序
     *
     * @param parent_id|父级菜单id|int|必填
     * @title 获取最大排序码
     * @resqParam code|状态码|String|必填
     * @resqParam data|数据|object|非必填
     * @resqParam msg|消息信息|String|必填
     * @respBody {"code":"000","data":"","msg":"success"}
     * @requestType post
     * @author zhangby
     * @date 2018/10/15 上午10:31
     */
    @NotNullPara("parent_id")
    public void getMenuMaxSort() {
        Record record = Db.findFirst("select sort sort from t_menu where del_flag=0 and parent_id = ? ORDER BY sort desc LIMIT 1", getPara("parent_id"));
        Integer sort = ObjectUtil.isNull(record) ? 10 : (record.getInt("sort") / 10) * 10 + 10;
        //默认排序，为最高排序加10
        renderJson(ResultPoJo.create().result(Kv.create().set("sort", sort)));
    }

    /**
     * 删除菜单
     *
     * @param id|'id'| int|必填
     * @title 删除菜单
     * @resqParam code|状态码|String|必填
     * @resqParam data|数据|object|非必填
     * @resqParam msg|消息信息|String|必填
     * @respBody {"code":"000","data":"","msg":"success"}
     * @requestType post
     * @author zhangby
     * @date 2018/10/15 下午2:14
     */
    @NotNullPara("id")
    @Before(Tx.class)
    public void deleteMenu() {
        new Menu().setId(getParaToInt("id")).setDelFlag(Constants.YES_NO_TYPE_1).update();
        renderJson(ResultPoJo.create());
    }
}
